//创建store状态管理
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

//从本地存储中获取购物车商品信息
var car = window.JSON.parse(localStorage.getItem('cart') || '[]')
const store = new Vuex.Store({
    state: {
        cart: car
    },
    mutations: {
        //将商品信息存到store仓库中
        //如果已经有该商品信息，仅添加数量
        addToCar(state, goodsinfo) {
            let flag = false //默认购物车中没有该商品        
            state.cart.some(item => {
                if (item.id == goodsinfo.id) {
                    item.count += goodsinfo.count
                    flag = true
                    return true;
                }
            })
            console.log(flag)
            if (!flag) {
                state.cart.push(goodsinfo) // 如果购物车中没有该商品信息，则把该商品信息push到仓库中
            }
            //将购物车中的商品信息存放到本地
            localStorage.setItem('cart', window.JSON.stringify(state.cart))

        },

        //更新购物车中的商品数量
        updateGoodsCount(state, goodsinfo) {
            state.cart.some(item => {
                if (item.id == goodsinfo.id) {
                    item.count = parseInt(goodsinfo.count)
                    return true
                }
            })
            localStorage.setItem('cart', JSON.stringify(state.cart))
        },

        //删除商品
        removeComment(state, id) {
            state.cart.some((item, i) => {
                if (item.id == id) {
                    state.cart.splice(i, 1)
                    return true
                }
            })
            localStorage.setItem('cart', JSON.stringify(state.cart))
        },

        //得到选择框的选中状态并将改变存储到本地存储中
        getSelectedChanged(state, o) {
            state.cart.some(item => {
                if (item.id == o.id) {
                    item.selected = o.selected
                    return true
                }
            })
            localStorage.setItem('cart', JSON.stringify(state.cart))
        }

    },
    getters: {
        totalCount(state) {
            //徽标中的商品数量
            let c = 0;
            //getters的特性，只要依赖的数据变化了，必然会重新计算这个getters的值
            state.cart.forEach(item => {
                c += item.count
            })
            return c;
        },

        addShopinfo(state) {
            //获取到store中所有商品的id，然后拼接出一个用逗号分隔的字符串
            var idArr = []
            state.cart.forEach(item => idArr.push(item.id))
            return idArr.join(",")
        },
        //获取每项商品的数量,属性名为id值，属性值为数量
        getgoodnumber(state) {
            let o = {}
            state.cart.forEach(item => {
                o[item.id] = item.count
            })
            return o;
        },

        //获取每件商品的选中状态,属性名为id值，属性值为selected选中状态
        getSelected(state) {
            var o = {}
            state.cart.forEach(item => {
                o[item.id] = item.selected
            })
            return o
        },

          //计算共买了多少件商品，共花了多少钱
          getAmount(state){
            var o = {
                amount:0,
                price:0
            }
            state.cart.forEach(item=>{
                if (item.selected){
                    o.amount += item.count
                    o.price += item.price*item.count
                }
            })
            return o
        }



    }
})

export default store